<?php


namespace api\modules\v1\controllers\base;

use common\models\base\Tags;
use Yii;
use api\controllers\OnAuthController;
use common\helpers\CommonHelper;
use services\base\TagsService;

class TagsController extends OnAuthController
{
    public $modelClass = '';

    /**
     * @api {get} /v1/base/tags/index 标签列表
     * @apiGroup Tags
     * @apiName index
     * @apiUse CommonParam
     *
     * @apiParam {String} keywords               搜索词
     * @apiParam {int} type                     类型
     * @apiParam {int} page
     * @apiParam {int} pageSize
     *
     * @apiSuccess {Object}  data
     * @apiSuccess {Array}   data.list                  列表数据
     * @apiSuccess {Number}  data.list.id               列表ID
     * @apiSuccess {String}  data.list.name             名称
     * @apiSuccess {Number}  data.list.type             类型ID
     * @apiSuccess {String}  data.list.type_name        类型名称
     * @apiSuccess {String}  data.list.operation_name   创建人
     * @apiSuccess {Number}  data.list.operation_id     创建人ID
     * @apiSuccess {Number}  data.list.sort             排序
     * @apiSuccess {String}  data.list.created_at_str   创建日期
     * @apiSuccess {String}  data.list.updated_at_str   更新日期
     * @apiSuccess {String}  data.type_list             类型筛选
     * @apiSuccess {String}  data.type_list.id          类型ID
     * @apiSuccess {String}  data.type_list.name        类型名称
     *
     */
    public function actionIndex()
    {
        $params = Yii::$app->request->get();

        $page = $params['page'] ?? 1;
        $pageSize = $params['pageSize'] ?? 10;
        $tagsService = new TagsService();
        $list = $tagsService->tagsList($params, $page, $pageSize);
        $types = Tags::$types;
        foreach ($types as $kty => $ty) {
            $list['type_list'][$kty]['id'] = $kty;
            $list['type_list'][$kty]['name'] = $ty;
        }
        $list['type_list'] = array_values($list['type_list']);
        return $list;
    }

    /**
     * @api {get} /v1/base/tags/check-status    检验标签名是否正常
     * @apiGroup Tags
     * @apiName check-status
     * @apiUse CommonParam
     *
     * @apiParam {String} name                          标签名
     * @apiParam {int} type                             类型【1内容、2工具】
     *
     * @apiSuccess {Object}  data
     * @apiSuccess {Object}  data.res                   是否存在禁用【true存在、false不存在】
     *
     */
    public function actionCheckStatus()
    {
        $params = Yii::$app->request->get();
        $params['type'] = $params['type'] ?? 0;
        $params['name'] = $params['name'] ?? '';
        if (empty($params['name'])) {
            return CommonHelper::api(422, '标签名不能为空');
        }

        return [
            'res' => TagsService::getInvalidListByName((int)$params['type'], $params['name']) ? false : true,
        ];
    }

    /**
     * @api {post} /v1/base/tags/create-tags 新增标签
     * @apiGroup Tags
     * @apiName create-tags
     * @apiUse CommonParam
     *
     * @apiBody {String}   name                标签名称【多个逗号隔开】
     * @apiBody {Number}   type                类型【1：内容； 2：工具】
     *
     * @apiSuccess {Number} data    新增/编辑ID
     */
    public function actionCreateTags()
    {
        $params = Yii::$app->request->post();
        if (!isset($params['name']) || !$params['name']) {
            return CommonHelper::api(422, '标签名称必填');
        }
        if (!isset($params['type']) || !$params['type']) {
            return CommonHelper::api(422, '缺少数据类型');
        }
        try {
            $tagsService = new TagsService();
            return $tagsService->createTags($params);
        } catch (\Exception $e) {
            return CommonHelper::api(422, $e->getMessage());
        }
    }

    /**
     * @api {post} /v1/base/tags/update-tags 更新标签
     * @apiGroup Tags
     * @apiName update-tags
     * @apiUse CommonParam
     *
     * @apiBody {Number}   id                  标签ID
     * @apiBody {String}   name                标签名称
     * @apiBody {Number}   type                类型【1：内容； 2：工具】
     *
     * @apiSuccess {Number} data    新增/编辑ID
     */
    public function actionUpdateTags()
    {
        $params = Yii::$app->request->post();
        if (!isset($params['name']) || !$params['name']) {
            return CommonHelper::api(422, '名称必填');
        }
        if (!isset($params['type']) || !$params['type']) {
            return CommonHelper::api(422, '缺少数据类型');
        }
        $tagsService = new TagsService();
        return $tagsService->updateTags($params);
    }

    /**
     * @api {post} /v1/base/tags/delete-tags 删除标签（软删除）
     * @apiGroup Tags
     * @apiName delete-tags
     * @apiUse CommonParam
     *
     * @apiBody {String} id     ID
     *
     * @apiSuccess {Object} data    返回数据
     */
    public function actionDeleteTags()
    {
        $params = Yii::$app->request->post();
        if (!isset($params['id']) || !$params['id']) {
            return CommonHelper::api(422, '缺少数据ID');
        }

        $tagsService = new TagsService();
        return $tagsService->deleteTags($params);
    }
}
